// BIMFACE 模型处理-图模对比相关接口
// https://bimface.com/docs/model-derivative/v1/api-reference/compareUsingPOST.html

import { CompareBeanInBatchesModel, CompareBeanModel } from './model/compareModel';
import  bimfaceHttp from '@/api/Bimface';

enum Api {
  Compare = '/v2/compare',
  CompareStatus = '/compares',
  CompareDetails = '/compareDetails',
}

/**
 * @abstract: 发起文件对比
 * @description: 不同版本的模型或图纸在转换成功后，即可发起文件对比。由于对比需要一定时间，可以通过Callback机制或查询接口获取对比状态，更多文件对比的说明可参考开发指南。
 */
export function intiateFileComparison(data: {
  sourceId?: string;
  previousId: number;
  followingId: number;
  name?: string;
  callback?: string;
  comparedEntityType: string; // 对比类型，"file"为单文件对比，"integration"为集成模型对比
  priority?: number;
  config?: object;
}) {
  return bimfaceHttp.post<CompareBeanModel>({ url: Api.Compare, data: data });
}

/**
 * @abstract: 获取文件对比状态
 * @description: 发起文件对比后，可以通过该接口查询对比状态
 */
export function getComparisonStatus(params: { compareId: number }) {
  return bimfaceHttp.get<CompareBeanModel>({ url: Api.Compare, params: params });
}

/**
 * @abstract: 批量获取文件对比状态
 * @description: 应用发起对比以后，可以根据筛选条件批量查询对比状态
 */
export function getComparisonStatusInBatches(data: {
  sourceId?: string;
  fileName?: string;
  endDate?: string;
  pageSize?: number;
  compareId?: number;
  type?: string;
  sortType?: string;
  pageNo?: number;
  appKey?: string;
  keyword?: string;
  ignoreOfflineDatabagInfo?: boolean;
  projectId: number;
  startDate?: string;
  status?: string;
}) {
  return bimfaceHttp.post<CompareBeanInBatchesModel>({ url: Api.CompareStatus, data: data });
}

/**
 * @abstract: 删除文件对比
 * @description: 删除文件对比
 */
export function deleteComparison(params: { compareId: number }) {
  return bimfaceHttp.delete<{
    code: string;
    data: string;
    message: string;
  }>({ url: Api.Compare, params: params });
}

/**
 * @abstract: 更新文件对比
 * @description: 文件对比发起后，可以通过该接口更新对比信息，如对比名称
 */
export function updateComparison(params: { compareId: number; name: string }) {
  return bimfaceHttp.patch<CompareBeanModel>({ url: Api.Compare, params: params });
}
